package com.baiwang.web.domain;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotEmpty;
import java.math.BigDecimal;
import java.util.Map;

/**
 * @author zhanliuzhu
 * @date 2024/4/16
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class OutputInvoiceIssueInvoiceDetail {

    /**
     * 明细行号
     */
    @NotEmpty(message = "明细行号不能为空")
    private Integer goodsLineNo;
    /**
     * 对应蓝票明细行号 税控类红字发票开具时无需传值； 全电类红字发票开具时必须传值；
     */
    private String originalInvoiceDetailNo;
    /**
     * 发票行性质， 0：正常行；1：折扣行；2：被折扣行，默认为0
     */
    private String invoiceLineNature;
    /**
     * 税收分类编码（末级节点）
     */
    private String goodsCode;
    /**
     * 商品编码， 可以支持根据商品名称或商品编码进行获取【增加商品编码字段】：平台必须维护商品信息
     */
    private String goodsPersonalCode;
    /**
     * 商品名称， 支持根据商品或商品编码获取商品信息：平台必须维护商品信息   ～～二选一必填
     */
    @NotEmpty(message = "商品名称不能为空")
    private String goodsName;
    /**
     * 规格型号，如果特殊票种为03、09、05、06，字段填写无效；
     */
    private String goodsSpecification;
    /**
     * 计量单位 特殊票种为12时必填,只能为辆 乐企：单位、数量、单价应同时为空或同时不为空；
     * * rpa：01 成品油发票必填 只能为吨或升；如果特殊票种为03、09、05、06时，字段填写无效；
     */
    private String goodsUnit;
    /**
     * 商品数量，最多允许17位（含小数点和负号），小数点后最多允许13位，特殊票种为05（不动产销售服务发票）、
     * * 06（不动产租赁服务发票）、12（机动车）、01 （全电成品油发票）时必填；乐企：单位、数量、单价应同时为空或同时不为空；
     * * 如果特殊票种为03时，字段填写无效；
     */
    @NotEmpty(message = "商品数量不能为空")
    private BigDecimal goodsQuantity;
    /**
     * 商品单价，最多允许17位（含小数点），小数点后最多允许13位，特殊票种为12时必填
     * * 乐企：单位、数量、单价应同时为空或同时不为空；rpa : 01 成品油发票 必填；如果特殊票种为03时，字段填写无效；
     */
    @NotEmpty(message = "商品单价不能为空")
    private BigDecimal goodsPrice;
    /**
     * 金额，小数点后2位,超长自动保留两位小数
     */
    @NotEmpty(message = "金额不能为空")
    private BigDecimal goodsTotalPrice;
    /**
     * 税额，小数点后2位,超长自动保留两位小数， 如果为空，根据金额、税率计算得出
     */
    @NotEmpty(message = "税额不能为空")
    private BigDecimal goodsTotalTax;
    /**
     * 税率,超长自动保留三位小数
     */
    @NotEmpty(message = "税率不能为空")
    private BigDecimal goodsTaxRate;
    /**
     * 优惠政策类型，preferentialMarkFlag=1，使用优惠政策时必传，如“免税”、“50%先征后退”、“即征即退50%”等
     */
    private String vatSpecialManagement;
    /**
     * 零税率标识：空 代表不使用零税率； 1：出口免税和其他免税优惠政策； 2：不征增值税；3：普通零税率
     */
    private String freeTaxMark;
    /**
     * 是否使用优惠政策， 0：未使用；1：使用 根据商品信息获取
     */
    private String preferentialMarkFlag;
    /**
     * 明细行折扣金额,全电不支持该字段
     */
    private Boolean goodsDiscountAmount;
    /**
     * Map&#60;String, Object>, 扩展字段
     */
    private Map<String,Object> ext;



}
